// package org.dromara.frame.service.impl;
//
// import cn.hutool.core.bean.BeanUtil;
// import cn.hutool.core.util.StrUtil;
// import lombok.extern.log4j.Log4j2;
// import org.apache.dubbo.config.annotation.DubboReference;
// import org.dromara.common.core.exception.ServiceException;
// import org.dromara.common.redis.utils.RedisUtils;
// import org.dromara.common.vcp.VcpUtil;
// import org.dromara.common.vcp.domain.SzSecret;
// import org.dromara.device.api.domain.vo.ApiDeviceVo;
// import org.dromara.frame.service.FrameService;
// import org.dromara.resource.api.RemoteFileService;
// import org.dromara.resource.api.domain.RemoteFile;
// import org.opencv.core.Mat;
// import org.opencv.imgcodecs.Imgcodecs;
// import org.opencv.videoio.VideoCapture;
// import org.springframework.stereotype.Service;
//
// import java.time.Duration;
//
// @Log4j2
// @Service
// public class FrameServiceImpl implements FrameService {
//
//     @DubboReference
//     private RemoteFileService remoteFileService;
//
//     @Override
//     public RemoteFile extraction(ApiDeviceVo apiDeviceVo) {
//
//         String videoFilePath = getLiveUrl(apiDeviceVo);
//
//         // 输出的图片地址
//         String outputImagePath = "path_to_save_extracted_frame.jpg";
//
//         // 默认的帧， 默认为0
//         int frameNumber = 0;
//
//         // 读取视频流
//         VideoCapture videoCapture = new VideoCapture(videoFilePath);
//
//         // Check if video file opened successfully
//         if (!videoCapture.isOpened()) {
//             System.out.println("Error: Unable to open video file.");
//             throw new ServiceException("打开视频流失败");
//         }
//
//         Mat frame = new Mat();
//
//         // Skip to the desired frame
//         // for (int i = 0; i < frameNumber; i++) {
//         //     videoCapture.read(frame);
//         // }
//
//         // 获取当前抽帧
//         videoCapture.read(frame);
//
//         // 保存抽帧到图片
//         Imgcodecs.imwrite(outputImagePath, frame);
//
//         // 释放VideoCapture和Mat对象
//         videoCapture.release();
//
//
//         // 上传图片到minio服务器中
//         byte[] imageData = new byte[(int) (frame.total() * frame.elemSize())];
//         frame.get(0, 0, imageData);
//         // remoteFileService.upload(IdUtil.fastSimpleUUID() + ".jpg");
//         String uploadedFileName = "uploaded_frame.jpg"; // Change the filename if needed
//         String contentType = "image/jpeg"; // Adjust the content type accordingly
//         RemoteFile remoteFile = remoteFileService.upload(uploadedFileName, uploadedFileName, contentType, imageData);
//
//         frame.release();
//         return remoteFile;
//     }
//
//     private String getLiveUrl(ApiDeviceVo apiDeviceVo) {
//         String redisKey = "frame:" + apiDeviceVo.getDeviceSn() + ":" + apiDeviceVo.getAppId();
//
//         String videoFilePath = RedisUtils.getCacheObject(redisKey);
//         if (StrUtil.isBlank(videoFilePath)) {
//             // 根据设备获取播放流
//             SzSecret szSecret = BeanUtil.toBean(apiDeviceVo, SzSecret.class);
//             videoFilePath = VcpUtil.getLiveUrl(szSecret, null);
//             if (StrUtil.isBlank(videoFilePath)) {
//                 log.info("视频流获取失败! 原因： {}", videoFilePath );
//                 return null;
//             }
//             // 4分钟过期时间
//             RedisUtils.setCacheObject(redisKey, videoFilePath, Duration.ofMinutes(4));
//         }
//         return videoFilePath;
//     }
// }
